package practice5;

import java.util.Scanner;

/**
 * 注意每次状态转移的时候要模上mod
 */
public class P8725 {
    public static void main(String[] args) {
        int mod= (int) (1e9+7);
        Scanner sc=new Scanner(System.in);
        int D=sc.nextInt();
        int T=sc.nextInt();
        int M=sc.nextInt();
        int[][] dp=new int[3001][1501];     //dp[i][j]表示i秒后使用j点体力共有多少种不会掉落的方法
        for(int i=1;i<=T;i++){
            for(int j=0;j<=M;j++){
                int down=i-j;
                int up=j;
                if(j==0){
                    //不消耗体力的情况下
                    if(down-up<D){
                        dp[i][j]=1;
                    }else{
                        dp[i][j]=0;
                    }
                } else if(j>i || down-up>=D){
                    //使用体力比时间长，或者使用体力不够已经到了悬崖边，则不存在、为0
                    dp[i][j]=0;
                } else if(i==j){
                    //每秒都使用体力，只有一种
                    dp[i][j]=1;
                }else if(down-up==D-1){
                    //快到边缘了，不能由边缘上划的得到
                    dp[i][j]=dp[i-1][j]%mod;
                } else if(down-up<D-1){
                    dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%mod;
                }
            }
        }
        System.out.println(dp[T][M]%mod);
    }
}
